Angular-এ সিঙ্গেলটন সার্ভিস হল এমন একটি সার্ভিস, যা একটি অ্যাপ্লিকেশনের জীবনকাল (lifetime) জুড়ে শুধুমাত্র একটি একক ইনস্ট্যান্স তৈরি করে এবং তা একাধিক কম্পোনেন্ট বা সার্ভিসের মধ্যে শেয়ার করা হয়। এই সার্ভিসটি সাধারণত অ্যাপ্লিকেশনের গ্লোবাল স্টেট বা গ্লোবাল ফাংশনালিটি প্রদান করে, যেমন ডেটা শেয়ারিং, লগিং, API কল, ইত্যাদি।
Angular ডিপেন্ডেন্সি ইনজেকশন (DI) সিস্টেমের মাধ্যমে সিঙ্গেলটন সার্ভিসগুলি কার্যকরী হয়। @Injectable() ডেকোরেটর এবং providedIn অপশন ব্যবহার করে সিঙ্গেলটন সার্ভিস তৈরি করা হয়।
Angular ডিপেন্ডেন্সি ইনজেকশন (DI) সিস্টেমের মাধ্যমে, সার্ভিসগুলো বিভিন্ন কম্পোনেন্ট বা ডিপেন্ডেন্ট ক্লাসে ইনজেক্ট করা হয়। সিঙ্গেলটন সার্ভিসের ক্ষেত্রে, DI সিস্টেম এটি নিশ্চিত করে যে, সার্ভিসটির একটিমাত্র ইনস্ট্যান্স পুরো অ্যাপ্লিকেশন জুড়ে ব্যবহৃত হবে।
@Injectable() ডেকোরেটর দিয়ে সার্ভিসটি Angular এর DI সিস্টেমে নিবন্ধিত হয়। সিঙ্গেলটন সার্ভিস তৈরি করতে providedIn অপশন ব্যবহার করা হয়, যা সার্ভিসটির স্কোপ নির্ধারণ করে।
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root' // এটি সার্ভিসটি অ্যাপ্লিকেশনটির রুট স্কোপে ইনজেক্ট করবে, যা সিঙ্গেলটন সার্ভিস তৈরি করে
})
export class LoggingService {
log(message: string) {
console.log(message);
}
}
এখানে, providedIn: 'root' মানে হচ্ছে সার্ভিসটি পুরো অ্যাপ্লিকেশন জুড়ে একমাত্র ইনস্ট্যান্সে উপলব্ধ হবে। root স্কোপে এই সার্ভিসটিকে নিবন্ধিত করা হয়, যার ফলে এটি অ্যাপ্লিকেশনের যে কোন কম্পোনেন্টে ব্যবহৃত হতে পারে।
এখন এই সিঙ্গেলটন সার্ভিসটি যে কোন কম্পোনেন্টে ইনজেক্ট করা যেতে পারে এবং শুধুমাত্র একটি ইনস্ট্যান্স ব্যবহার করা হবে।
import { Component } from '@angular/core';
import { LoggingService } from './logging.service';
@Component({
selector: 'app-home',
templateUrl: './home.component.html'
})
export class HomeComponent {
constructor(private loggingService: LoggingService) {
this.loggingService.log('Home component loaded');
}
}
এখানে LoggingService সিঙ্গেলটন সার্ভিসটি HomeComponent-এ ইনজেক্ট করা হয়েছে। এই সার্ভিসটি ব্যবহার করে আমরা কোনো লগ মেসেজ কনসোলে প্রিন্ট করতে পারি।
import { Component } from '@angular/core';
import { LoggingService } from './logging.service';
@Component({
selector: 'app-about',
templateUrl: './about.component.html'
})
export class AboutComponent {
constructor(private loggingService: LoggingService) {
this.loggingService.log('About component loaded');
}
}
এখানে, AboutComponent-এও LoggingService ইনজেক্ট করা হয়েছে। কিন্তু, যেহেতু এটি একটি সিঙ্গেলটন সার্ভিস, তাই এটি শুধুমাত্র একটি ইনস্ট্যান্স থাকবে এবং HomeComponent এবং AboutComponent উভয়ই সেই একই ইনস্ট্যান্স শেয়ার করবে।
Angular-এ সিঙ্গেলটন সার্ভিস ব্যবহারের জন্য providedIn অপশনটি ব্যবহার করা হয়। এছাড়া, যদি আপনি সার্ভিসটিকে নির্দিষ্ট মডিউলের মধ্যে সীমাবদ্ধ করতে চান, তবে এটি শুধুমাত্র ওই মডিউলের স্কোপে প্রদান করা হবে। উদাহরণস্বরূপ, যদি আপনি সার্ভিসটি কেবলমাত্র FeatureModule এ ব্যবহার করতে চান:
@Injectable({
providedIn: FeatureModule
})
export class FeatureService {
// সার্ভিসের কোড
}
এভাবে, এই সার্ভিসটি শুধুমাত্র FeatureModule এর মধ্যে ইনজেক্ট হবে এবং অ্যাপ্লিকেশনের অন্য কোথাও উপলব্ধ হবে না।
Angular-এ সিঙ্গেলটন সার্ভিস একটি গুরুত্বপূর্ণ কনসেপ্ট যা ডিপেন্ডেন্সি ইনজেকশন ব্যবস্থাপনা ও অ্যাপ্লিকেশনের গ্লোবাল স্টেট শেয়ার করতে সাহায্য করে। এটি একাধিক কম্পোনেন্টে ব্যবহৃত হলেও, সার্ভিসটির শুধুমাত্র একটি ইনস্ট্যান্স তৈরি হয় এবং অ্যাপ্লিকেশনের পুরো জীবনকাল জুড়ে এটি ব্যবহৃত হয়।
Read more